package com.sm.imlibrary.roondao.dao;


import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Update;

import java.util.List;

/**
 * created by zhud on 2019/9/30
 */
public interface BaseDao<T, ID> {
    //-----------------------insert----------------------
    // OnConflictStrategy.REPLACE表示如果已经有数据，那么就覆盖掉
    //数据的判断通过主键进行匹配，也就是uid，非整个user对象
    //返回Long数据表示，插入条目的主键值（uid）
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    Long insert(T t);

    //返回List<Long>数据表示被插入数据的主键uid列表
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    List<Long> insertAll(T... ts);

    //返回List<Long>数据表示被插入数据的主键uid列表
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    List<Long> insertAll(List<T> ts);

    //---------------------update------------------------
    //更新已有数据，根据主键（uid）匹配，而非整个user对象
    //返回类型int代表更新的条目数目，而非主键uid的值。
    //表示更新了多少条目
    @Update()
    int update(T t);

    //同上
    @Update()
    int updateAll(T... ts);

    //同上
    @Update()
    int updateAll(List<T> ts);

    //-------------------delete-------------------
    //删除user数据，数据的匹配通过主键uid实现。
    //返回int数据表示删除了多少条。非主键uid值。
    @Delete
    int delete(T t);

    //同上
    @Delete
    int deleteAll(List<T> ts);

    //同上
    @Delete
    int deleteAll(T... ts);
}
